package server;

import java.io.*;
import java.util.*;
import java.net.Socket;
import java.util.ArrayList;

public class AtendeEscritor implements Runnable {

    private Socket s;
    private String mensagem;
    public String msg;
    private String remetente;
    private String destinatario;
    private ArrayList<Lista> list;
    private Lista l;
    private boolean acabou;
    
    AtendeEscritor(Socket server, ArrayList<Lista> l) {
        this.s = server;
        this.list = l;
    }

    public void run() {
        try {

            DataInputStream in = new DataInputStream(s.getInputStream());
            DataOutputStream out = new DataOutputStream(s.getOutputStream());

            boolean pronto = false;
            while (!pronto) {

                //Cria um BufferedReader para o canal da stream de entrada de dados do socket s
                String mensagem = in.readUTF();

                try {
                    if (mensagem.contains("TO:")) {
                        String[] partes = mensagem.split(":");
                        remetente = partes[1];
                        System.out.println("Remetente: " + remetente);
                    }
                    if (mensagem.contains("FROM:")) {
                        String[] partes = mensagem.split(":");
                        destinatario = partes[1];
                        l = new Lista (destinatario);
                        list.add(l);
                        System.out.println("Destinatario: " + destinatario);
                    }
                    if (mensagem.contains("MSG:")) {
                        String[] partes = mensagem.split(":");
                        msg = partes[1];
                        System.out.println("Mensagem: " + partes[1]);
                    }
                    if (mensagem.contains("BYE")) {
                        if (!list.isEmpty()){
                            Iterator<Lista> it = list.iterator();
                            while (it.hasNext()) {
                                Lista l = it.next();
                                if (l.nomeLista().contains(destinatario)){
                                    l.setMensagem(msg);
                                    System.out.println("Lista: " + l.nomeLista());
                                    System.out.println(l.getMensagem());
                                }
                            }
                        }
                        //pronto = true;
                        out.writeUTF("OK");

                    }
                } catch (IOException e) {

                }

            }

                in.close();
                out.close();
            
        } catch (Exception e) {
            System.out.println("Erro na thread 1 " + e.toString());
        }
    }
}
